package com.demo.jzoffer2;

import com.demo.domain.TreeNode;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;


/**
 * @author gy
 * @date 2022/12/1
 */
public class Test1212_01 {

    /**
     * 从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
     *
     *
     *
     * 例如:
     * 给定二叉树: [3,9,20,null,null,15,7],
     *
     *     3
     *    / \
     *   9  20
     *     /  \
     *    15   7
     * 返回：
     *
     * [3,9,20,15,7]
     * @param root
     * @return
     */
    public int[] levelOrder(TreeNode root) {
        /**
         * 思路分析：从上到下打印，按层打印，又称为二叉树的 广度优先搜索 BFS
         * 通常借助 队列 先入先出的特性来实现
         */
        //1、 特例处理：当树的根节点为null，则直接返回空数组
        if(root == null){
            return new int[0];
        }

        // 2、初始化 打印结果列表 res  和  包含root节点的树队列
        int[] res;
        ArrayList<Integer> ans = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root); // 需要将root入队

        // 3、如果队列不为null；开始出队，打印节点值，如果节点的左右节点不为null，加入队列
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            ans.add(node.val);
            if (node.left != null) {
                queue.add(node.left);
            }
            if (node.right != null) {
                queue.add(node.right);
            }
        }

        // 4、返回res
        res = new int[ans.size()];
        for (int i = 0; i < ans.size(); i++) {
            res[i] = ans.get(i);
        }
        return res;
    }

    @Test
    public void m1() {

        System.out.println(m2());

    }

    public String m2(){
        HashMap<Object, Object> map = new HashMap<>();
//        map.put("a","aaa");
        Object a = map.get("a");
        if (a != null) {
            return a.toString();
        }
        return "b";
    }

}

